์ž‘์„ฑ: 2026-03-04 04:03:38์ˆ˜์ •: 2026-03-04 04:03:38

Clean Architecture์™€ ๋””์ž์ธ ํŒจํ„ด: ์ง€์† ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์„ค๊ณ„

ํ”„๋กœ๊ทธ๋žจ์€ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. **ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜(Clean Architecture)**์™€ ๋””์ž์ธ ํŒจํ„ด์€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ์ฝ”๋“œ๊ฐ€ ์ฉ์ง€ ์•Š๊ณ , ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.


1. ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)

๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด์ด ์ œ์•ˆํ•œ ์ด ์„ค๊ณ„์˜ ํ•ต์‹ฌ์€ **"๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ"**์™€ **"์˜์กด์„ฑ์˜ ๋ฐฉํ–ฅ"**์ž…๋‹ˆ๋‹ค.

  • ์˜์กด์„ฑ ๊ทœ์น™: ์˜์กด์„ฑ์€ ๋ฐ˜๋“œ์‹œ ์•ˆ์ชฝ(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)์œผ๋กœ๋งŒ ํ–ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Entities (ํ•ต์‹ฌ ์—…๋ฌด ๊ทœ์น™): ๊ฐ€์žฅ ์•ˆ์ชฝ ์›. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์ ˆ๋Œ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.
  • Use Cases (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—…๋ฌด ๊ทœ์น™): ์‹œ์Šคํ…œ์˜ ๋™์ž‘์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • Adapters & Frameworks: ๊ฐ€์žฅ ๋ฐ”๊นฅ์ชฝ ์›. DB, ์›น ํ”„๋ ˆ์ž„์›Œํฌ, UI ๋“ฑ์€ ์–ธ์ œ๋“  ๊ต์ฒด ๊ฐ€๋Šฅํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

2. ์‹ค๋ฌด์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ๋””์ž์ธ ํŒจํ„ด

๋””์ž์ธ ํŒจํ„ด์€ ์„ ๋ฐฐ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งˆ์ฃผํ–ˆ๋˜ ๋ฌธ์ œ๋“ค์— ๋Œ€ํ•œ ๊ฒ€์ฆ๋œ ํ•ด๊ฒฐ์ฑ…์ž…๋‹ˆ๋‹ค.

โ‘  ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด (Singleton)

ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง์˜ ๋นˆ(Bean)์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

โ‘ก ์ „๋žต ํŒจํ„ด (Strategy)

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํด๋ž˜์Šคํ™”ํ•˜์—ฌ ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒฐ์ œ ์ˆ˜๋‹จ(์นด๋“œ, ์นด์นด์˜คํŽ˜์ด, ํ† ์Šค)์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒฐ์ œ ๋กœ์ง์„ ์‹คํ–‰ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

โ‘ข ๋นŒ๋” ํŒจํ„ด (Builder)

๋ณต์žกํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ •์„ ์บก์Аํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋…์„ฑ์ด ๋†’๊ณ  ํ•„์š”ํ•œ ํ•„๋“œ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด ์ž๋ฐ” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ•„์ˆ˜์ ์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. (Lombok์˜ @Builder)


3. ์™œ ์ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ•ด์•ผ ํ• ๊นŒ?

  1. ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ(DB ๋“ฑ)์™€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  2. ์œ ์—ฐ์„ฑ: MySQL์„ ์“ฐ๋‹ค๊ฐ€ PostgreSQL๋กœ ๋ฐ”๊ฟ”๋„ ํ•ต์‹ฌ ๋กœ์ง์€ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  3. ํ˜‘์—… ํšจ์œจ: ๊ทœ์น™์ด ๋ช…ํ™•ํ•˜๋ฏ€๋กœ ์ˆ˜์‹ญ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์—…ํ•ด๋„ ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

4. ๊ฒฐ๋ก 

์ฒ˜์Œ๋ถ€ํ„ฐ ์™„๋ฒฝํ•œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ **"๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ๊ธฐ์ˆ ์  ์„ธ๋ถ€์‚ฌํ•ญ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค"**๋Š” ์›์น™์„ ๊ฐ€์Šด์— ์ƒˆ๊ธฐ๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด, ํ›จ์”ฌ ๋” ๋‚˜์€ ํ’ˆ์งˆ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.